// 这里是axios所欧的配置
import axios from "axios";
axios.defaults.baseURL = '/api'
// 引入参数化模块
import qsString from 'querystring'
// 引入封装好的路由模块
import router from "../router";


// 设置拦截器
// 请求拦截器
axios.interceptors.request.use(req => {
    // console.log(req);
    if (req.url !== '/userlogin') {
         //添加token
    req.headers.authorization = sessionStorage.getItem("userInfo")
    ? JSON.parse(sessionStorage.getItem("userInfo")).token
    : null;
    }
    // 请求拦截器的使用场景？
    // 设置请求头 设置token
    // 必须要返回
    return req
})
// 相应拦截器
axios.interceptors.response.use(res => {
    // 相应拦截器的使用场景？
    // 全局拦截token失效 国旗失效等问题
    // 全局错误拦截
    // 一般工作是通过code码去判断逻辑，但是这个后段服务不管什么错误码返回的都是500 所以我们要通过msg去分别
    if(res.data.msg == '请设置请求头,并携带验证字符串'){
        alert(res.data.msg)
        router.push('/login')
    }else if(res.data.msg == '登录已过期或访问权限受限'){
        alert(res.data.msg)
        router.push('/login')
    }else{
        // 必须返回
    return res.data
    }
    // console.log(res.data);
    // return res.data
})

/* 
    es6的导入方式
    导出方式影响了导入方式
    导出 export default 变量
    导入 import 自定义 from '位置'
    导出 export 变量
    导入 import {变量} from '位置'
*/

// get 传参 URL：后段提供的地址  params参数对象
export const get = (url,params={})=> {
    return new Promise((resolve,reject) => {
        // 调用axios的get
        axios.get(url,{
            params
        })
        .then(res=>resolve(res))
        .catch(err=>reject(err))
    })
}

/*
    post
    传参
    url:后段提供的地址
    params参数对象
    isFile是否有上传文件

    post方式比较特殊
    后段（java/php)一般要求我们的传入内容（content-type）格式要有所变化
    没有转化之前：content-type：application/json
    一般后段都会要求格式，默认格式
    content-type:application/x-www-form-urlencoded
    默认，在发送之前对所有字符进行编码（将空格转换为”+“符号，图舒服好转换为ASCII HEX值
    但是 一旦上传文件，格式类型 必须改成multipart/form-data
    content-type:multipart/forn-data
*/
export const post = (url,params={},isFile=false)=>{
    // 设置一个空对象
    let data = {}
    if(isFile){
        // 有上传文件 要修改content-type
        data = new FormData()
        for(let i in params){
            data.append(i,params[i])
        }
    }else{
        data = qsString.stringify(params)
    }
    return new Promise((resolve,reject)=>{
        // 调用axios的get
        axios.post(url,data)
        .then(res=>resolve(res))
        .catch(err=>reject(err))
    })
}